#include <bits/stdc++.h>
using namespace std;
 int V ;
int n;//物品个数
 
int main() {
  /*
  二维0-1背包：
  n间物品的价值分别：vi (i:1~n),重量为:wi
  背包容量：w
  目的：背包价值max

  输入样例：
  n:4 volume:10
  value:8 7 2 9
  weight:5 4 3 2
  
  */
  freopen("01backage.txt","r",stdin);
  cin>>n;cin>>V;
  int *object = new int[n+1];
  int *weight = new int[n+1];
  object[0] = 0;weight[0] = 0;
  for(int i=1;i<=n;i++) cin>>object[i];//输入价值
  
  for(int i=1;i<=n;i++) cin>>weight[i];//输入质量
/*
 第i件物品 抉择
 dp[i][n] = max(dp[i-1][n],dp[i-1][n-weight[i]]+object[i])
 求解顺序  外循环：每件物品=> max(dp[n][...])

 dp[m][n]:前m件物品的规模问题，剩余容量为n时的最大背包价值为dp[m][n]
*/
  int **dp = new int*[n+1];
  for(int i=0;i<=n;i++){
  		dp[i] = new int[V];
	}
  
  for(int i=0;i<=V;i++) dp[0][i] = 0;

  for(int i=1;i<=n;i++){
    for(int v=0;v<=V;v++){
      dp[i][v] = max(dp[i-1][v],dp[i-1][v-weight[i]]+object[i]);      
    }
  }

  int res = -2147483648;
  for(int i=0;i<=V;i++){
    if (res<dp[n][i]){
      res = dp[n][i];
    }
  }

  cout<<res<<endl;
  return 0;
}
